﻿Imports AccesoDatos


Public Class MultiDepartamento

#Region "David Murillo"
    ''' <summary>
    ''' Registra un departamento
    ''' </summary>
    ''' <param name="p_nombre">Nombre del departamento</param>
    ''' <param name="p_descripcion">Descripción del departamento</param>
    ''' <remarks>Creado por: David Murillo, Creado: 12/06/2010, Modificado: 30/06/2010</remarks>
    Public Shared Sub registrar(ByVal p_nombre As String, ByVal p_descripcion As String)

        Dim sql As String
        Dim pars(1) As Parametro

        sql = "INSERT INTO t_departamento values(p_nombre, p_descripcion,null,0)"

        pars(0) = New Parametro("p_nombre", p_nombre)
        pars(1) = New Parametro("p_descripcion", p_descripcion)

        g_access.ejecutarSQL(sql, pars)

    End Sub

    ''' <summary>
    ''' Elimina un departamento
    ''' </summary>
    ''' <param name="p_codigo">Código del departamento</param>
    ''' <remarks>Creado por: David Murillo, Creado: 12/06/2010, Modificado: 30/06/2010</remarks>
    Public Shared Sub eliminar(ByVal p_codigo As String)

        Dim sql As String
        Dim codigoNivel As String
        Dim pars(0) As Parametro
        Dim listaNiveles As List(Of Nivel)

        sql = "update t_departamento set eliminado=1, director=null where codigo=p_codigo"

        pars(0) = New Parametro("p_codigo", p_codigo)

        g_access.ejecutarSQL(sql, pars)

        listaNiveles = MultiNivel.listarPorDepartamento(p_codigo) 'list of niveles

        For Each nivel As Nivel In listaNiveles
            codigoNivel = nivel.codigo
            MultiPuesto.eliminar(codigoNivel)
        Next

        sql = "update t_nivel set eliminado=1 where codigo_departamento=p_codigo"

        g_access.ejecutarSQL(sql, pars)


    End Sub

    ''' <summary>
    ''' Busca un departamento, ya sea por codigo o por nombre, si se encuentran
    ''' vacíos se buscan todos los departamentos.
    ''' </summary>
    ''' <param name="p_codigo">Código del departamento</param>
    ''' <param name="p_nombre">Nombre del departamento</param>
    ''' <returns>Lista de departamentos</returns>
    ''' <remarks>Creado por: David Murillo, Creado: 12/06/2010, Modificado: 30/06/2010</remarks>
    Public Shared Function buscar(ByVal p_codigo As String, ByVal p_nombre As String) As List(Of Departamento)

        Dim listaDepartamentos As New List(Of Departamento)
        Dim sql As String
        Dim pars(1) As Parametro
        Dim drDepartamento As IDataReader

        sql = "select * from t_departamento t where codigo like p_codigo and nombre like p_nombre and eliminado=0"

        pars(0) = New Parametro("p_codigo", "%" & p_codigo & "%")
        pars(1) = New Parametro("p_nombre", "%" & p_nombre & "%")

        drDepartamento = g_access.ejecutarQuery(sql, pars)

        While drDepartamento.Read()
            listaDepartamentos.Add(cargarDepartamento(drDepartamento))
        End While

        Return listaDepartamentos

    End Function

    ''' <summary>
    ''' Modifica un departamento
    ''' </summary>
    ''' <param name="p_codigo">Código del departamento</param>
    ''' <param name="p_nombre">Nombre del departamento</param>
    ''' <param name="p_descripcion">Descripción del departamento</param>
    ''' <param name="p_director">Cédula del director(jefe)</param>
    ''' <remarks>Creado por: David Murillo, Creado: 12/06/2010, Modificado: 30/06/2010</remarks>
    Public Shared Sub modificar(ByVal p_codigo As String, ByVal p_nombre As String, ByVal p_descripcion As String, ByVal p_director As String)

        Dim sql As String
        Dim pars(3) As Parametro

        sql = "update t_departamento set nombre=p_nombre, descripcion=p_descripcion, director=p_director where codigo=p_codigo"

        pars(0) = New Parametro("p_nombre", p_nombre)
        pars(1) = New Parametro("p_descripcion", p_descripcion)
        pars(2) = New Parametro("p_director", p_director)
        pars(3) = New Parametro("p_codigo", p_codigo)

        g_access.ejecutarSQL(sql, pars)

    End Sub

    ''' <summary>
    ''' Se encarga de instanciar cada departamento
    ''' </summary>
    ''' <param name="p_dr">Datos provenientes de la BD en un IDataReader</param>
    ''' <returns>Un departamento</returns>
    ''' <remarks>Creado por: David Murillo, Creado: 12/06/2010, Modificado: 30/06/2010</remarks>
    Private Shared Function cargarDepartamento(ByVal p_dr As IDataReader) As Departamento
        Dim departamento As New Departamento

        departamento.codigo = p_dr.Item("codigo")
        departamento.nombre = p_dr.Item("nombre")
        departamento.descripcion = p_dr.Item("descripcion")

        If Not TypeOf p_dr.Item("director") Is DBNull Then
            departamento.director = p_dr.Item("director")
        Else
            departamento.director = "No tiene"
        End If

        Return departamento
    End Function
#End Region
End Class
